In a computer system, the software objects for a running software application are stored in an area of system memory where they can be readily accessed. Although some software languages support manual memory allocation, such that the memory occupied by software objects can be manually allocated and deallocated; other software languages, such as Java, utilize dynamic memory allocation, together with a garbage collector that periodically reclaims memory occupied by software objects that are no longer in use by running software applications.
The area of memory that stores software objects is generally referred to as the heap. A virtual machine maintains the heap for use by software applications, including determining the garbage collector or garbage collection algorithm to use. Examples of different garbage collection algorithms include copying, mark-sweep, reference counting, and variations thereof, such as mark-copy and mark-split. Each of the different garbage collection algorithms provides advantages and disadvantages, depending on the particular computing environment in which they are used.